package com.captain.leetcode.二分查找;

/**
 * @author captain
 * @Des 实现 int sqrt(int x) 函数。
 * <p>
 * 计算并返回 x 的平方根，其中 x 是非负整数。
 * <p>
 * 由于返回类型是整数，结果只保留整数的部分，小数部分将被舍去。
 * <p>
 * 示例 1:
 * <p>
 * 输入: 4
 * 输出: 2
 * 示例 2:
 * <p>
 * 输入: 8
 * 输出: 2
 * 说明: 8 的平方根是 2.82842...,
 *      由于返回类型是整数，小数部分将被舍去。
 * @Date 2021/8/2 22:50
 */
public class 的x平方根69 {

    public static void main(String[] args) {
        System.out.println(new 的x平方根69().mySqrt(1));
    }

    //二分查找
    public int mySqrt(int x) {
        long l = 0, r = x, res = 0;

        //搜索区间
        while (l <= r) {
            long mid = l + (r - l) / 2;

            // 3 x 3 = 9  4 x 4 = 16
            if (mid * mid <= x) {
                res = mid;
                l = mid + 1;
            } else {
                r = mid - 1;
            }
        }
        return (int) res;
    }
}
